/*
 * @Author: zoubotao
 * @Date: 2020-12-08 17:10:53
 * @LastEditors: zengy
 * @LastEditTime: 2021-06-15 15:23:25
 * @FilePath: \Mics3.0_3DViewer_WEB\src\plugins\u3d.js
 */
import store from '@/store'
let sendToU3D, // 实际U3D注入的方法保存至此变量
  sendToU3DQueue = [], // 当U3D未注入sendToU3D方法时，调用的数据先存在队列里
  /**
   * @description: 当U3D未注入sendToU3D方法时，用此方法保存好需要发送到U3D的数据到队列中
   * @param {Object} data
   * @return {*}
   */
  initSendToU3D = function (data) {
    sendToU3DQueue.push(data)
  }

// 注入发送到U3D的方法
Object.defineProperty(window, 'sendToU3D', {
  get() { return sendToU3D || initSendToU3D },
  set(val) {
    if (sendToU3DQueue.length > 0) {
      sendToU3DQueue.forEach(data => val(data))
      sendToU3DQueue = []
    }
    sendToU3D = val
  }
})

// 全局注册页面回调，便于U3D通知h5页面必要数据
Object.defineProperty(window, 'U3DCallback', {
  get() {
    return {
      /**
       * @description: 用于U3D通知h5页面的方法
       * @param {Object} params U3D返回的参数
       * @param {String} params.command 返回数据的指令名
       * @param {Object} params.data 返回的数据
       * @return {*}
       */
      send(res) {
        const { command, data } = JSON.parse(res)
        store.state.U3DEventBus.$emit(command, data)
      },
    }
  }
})

export default {
  install: function (app) {
    app.config.globalProperties.sendToU3D = (data) => window.sendToU3D(JSON.stringify(data))
  }
}

